/*
	用于在数据筛选页筛选数据后传递到监听页进行处理，例如选项选择
	页面关系必须是：
	1、监听发起页-（跳转）-> 筛选桥接页 -（跳转）-> 数据筛选页
		数据筛选页-（返回）->监听发起页
	此方法只限uniapp可用（可能是它的编译有关）
*/ 
import Vue from 'vue'

Vue.prototype.$swing = {
	//【监听发起页】
	listen({ data, path }, fnc){//发起监听，传递数据并跳页至【数据筛选页/数据桥接页】
		/*
			@data 传递的数据
			@path 传递的路径
			@fnc 传递回来后的处理回调函数
		*/
		function GetPageRoute(mp){
			if(mp.page){
				return '/'+mp.page.route
			}
			else{
				return GetPageRoute(mp.component.$vm.$parent.$mp)
			}
		}
		let route = GetPageRoute(this.$mp)
		uni.$off(`${route}-Filter`)//清除相同命名的监听，防止串味
		uni.$once(`${route}-Filter`, fnc)
		uni.navigateTo({ url: path, success:(res)=>{
			res.eventChannel.emit('$Swing', { data, swing:{route,delta:1} })
		} })
	},
	
	//【数据筛选页/数据桥接页】
	load(fnc){//接收【监听发起页/数据桥接页】传递的数据 
		/*
			@fnc 处理传值的回调函数
		*/
		const eventChannel = this.getOpenerEventChannel()
		eventChannel.on('$Swing', res=>{
			this.$mp.swing = {...res.swing}
			fnc&&fnc(res.data)
		})
	},
	//【数据筛选页】
	back(data){//返回【监听发起页】并回传数据 
		/*
			@data 传递的数据
			@delta 返回的深度
		*/
		uni.$emit( `${this.$mp.swing.route}-Filter`, data )
		uni.navigateBack({ delta:this.$mp.swing.delta })
	},
	
	//【筛选桥接页】
	link({ data, path }){//传递数据并跳页至【数据筛选页/数据桥接页】
		/*
			@data 传递的数据
			@path 传递的路径
		*/
		uni.navigateTo({ url:path, success:(res)=>{
			res.eventChannel.emit('$Swing', { data, swing: {
				route:this.$mp.swing.route,
				delta:this.$mp.swing.delta+1
			}})
		} })
	}
	
}